開一個
docker-compose.yml
填入
version: "3.5"
services:
rabbitmq:
image: rabbitmq:management
hostname: "y_rabbitmq"
ports:
- "5672:5672"
- "15672:15672"
container_name: yc_rabbitmq
然後在那個資料夾打 docker-compose up --build
這樣就能起一個rabbitmq了
再來
蓋一個rabbitMQ大概如下。
add queue
add exchange
add queue裡面的bind
即可
!
!
如果有打進去的話會是這樣(還沒打 等一下)
java的部分測試的話
pom檔+這段
<!-- Spring AMQP for RabbitMQ -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
</dependency>
去application.yml +連線資訊 然後把exchange,exchange,queues 等剛剛填在rabbitMQ的資訊寫在這
spring :
rabbitmq:
virtual-host: /
username: guest
password: guest
port: 5672
host: 127.0.0.1
example:
rabbitmq :
exchange : yc_topic
routing_key : yc_Routing_Key
queues : yc_queues
public interface RabbitService
{
void sendMessage(String yc);
}
@Slf4j
@Service
public class RabbitServiceImpl implements RabbitService
{
@Autowired
private RabbitServiceClient rabbitServiceClient;
@Value("${example.rabbitmq.exchange}")
private String exchange;
@Value("${example.rabbitmq.routing_key}")
private String routingKey;
@Override
public void sendMessage(String yc)
{
rabbitServiceClient.sendMessage(exchange, routingKey, yc);
}
}
RabbitServiceClient
@Service
public interface RabbitServiceClient
{
void sendMessage(String exchangeKey, String routingKey, Object message);
}
@Slf4j
@Component
public class RabbitServiceClientImpl implements RabbitServiceClient
{
private static final MessagePostProcessor rabbitTemplatePostProcessor = new RabbitTemplatePostProcessor();
@Autowired
private RabbitTemplate rabbitTemplate;
@Override
public void sendMessage(String exchangeKey, String routingKey, Object message)
{
log.info("Sending one message to host: [{}], port: [{}].", rabbitTemplate.getConnectionFactory().getHost(),
rabbitTemplate.getConnectionFactory().getPort());
log.info("Sending Routing Key [{}]; exchange [{}]", routingKey, exchangeKey);
log.info("message[{}]", message);
rabbitTemplate.convertAndSend(exchangeKey, routingKey, message, rabbitTemplatePostProcessor);
}
}
public class RabbitTemplatePostProcessor implements MessagePostProcessor
{
@Override
public Message postProcessMessage(Message message) throws AmqpException
{
message.getMessageProperties().setTimestamp(Date.from(Instant.now()));
return message;
}
}
@Slf4j
@Service
public class CreateWaybillListener
{
@RabbitListener(queues = "example.rabbitmq.queues")
public void createWaybill(@Payload String yc,
@Header(value = AmqpHeaders.RECEIVED_ROUTING_KEY) String receivedRoutingKey)
{
log.info("Reschedule delivery timeslot from FRS: {}; yc: {}", receivedRoutingKey, yc);
}
}
done.
打controller接sendMessage 就可以了.